iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 9
1
自我挑戰組

IT人員面面觀系列 第 8

[SQL Server]使用DMV找出最消耗CPU/IO的SQL指令

  • 分享至 

  • xImage
  •  

在實務上經常會定期找出消耗CPU/IO成本比較大的Top 10 Query來進行語法調教,
以增進DB的效能和AP查詢回應的速度,以下介紹常用到的二種DMV:

--查出前十名總累積IO數最高的的Query
SELECT TOP 10
total_logical_reads+total_logical_writes AS [總IO],
execution_count AS [執行次數],
total_logical_reads AS [讀取IO數],
total_logical_writes AS [寫入IO數],
st.text AS [SQL指令]
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(sql_handle) st
WHERE total_logical_reads+total_logical_writes> 0
ORDER BY [總IO] DESC

查詢結果如下:
https://ithelp.ithome.com.tw/upload/images/20181009/20107408uXje0ADm8y.jpg

--查出前十名總使用CPU時間最高的的Query
SELECT  TOP 10 
qs.total_worker_time AS [總執行時間],
qs.execution_count AS [執行次數],
qs.total_worker_time / qs.execution_count AS [平均執行時間],
SUBSTRING(qt.text, qs.statement_start_offset / 2, 
(CASE WHEN qs.statement_end_offset = -1 THEN len(CONVERT (NVARCHAR (MAX), qt.text)) * 2
ELSE qs.statement_end_offset END - qs.statement_start_offset) / 2) AS [SQL指令]
FROM     sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text (qs.sql_handle) AS qt
ORDER BY [總執行時間] DESC;

查詢結果如下:
https://ithelp.ithome.com.tw/upload/images/20181009/20107408WPBJM1wD8Q.jpg

SQL指令調教的方法不外乎是新增缺乏的索引定期維護索引
再者可以針對擁有大量資料量的表格進行資料定期刪除,
又或者可將少被使用的歷史資料(例如:半年前或上一季)切到其它張表封存,
等到有需要查詢再進行存取,這作法也是可以有效的減少查詢回應的時間。


上一篇
[Windows]清除過期檔案的好工具:forfile指令的應用
下一篇
[C#]將Xml字串轉成Data Table
系列文
IT人員面面觀28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言